package lk.service.blogspringboot.service.impl;

import lk.service.blogspringboot.domain.UserInfo;
import lk.service.blogspringboot.mapper.UserInfoMapper;
import lk.service.blogspringboot.service.UserInfoService;
import lk.service.blogspringboot.util.R;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

/**
 * 用户信息表(UserInfo)表服务实现类
 *
 * @author LK
 * @since 2024-08-21 19:40:07
 */
@Service("userInfoService")
public class UserInfoServiceImpl implements UserInfoService {
    @Resource
    private UserInfoMapper userInfoMapper;

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    @Override
    public R queryById(Integer id) {
        return R.ok().setData(this.userInfoMapper.queryById(id));
    }

    /**
     * 全查询
     *
     * @param userInfo 筛选条件
     * @return 查询结果
     */
    @Override
    public R queryAll(UserInfo userInfo) {
        return R.ok().setData(this.userInfoMapper.queryAll(userInfo));
    }

    /**
     * 新增数据
     *
     * @param userInfo 实例对象
     * @return 实例对象
     */
    @Override
    public R insert(UserInfo userInfo) {
        this.userInfoMapper.insert(userInfo);
        return R.ok().setData(userInfo);
    }

    /**
     * 修改数据
     *
     * @param userInfo 实例对象
     * @return 实例对象
     */
    @Override
    public R update(UserInfo userInfo) {
        this.userInfoMapper.update(userInfo);
        return R.ok().setData(this.queryById(userInfo.getId()));
    }

    /**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 是否成功
     */
    @Override
    public R deleteById(Integer id) {
        boolean del = this.userInfoMapper.deleteById(id) > 0;
        return R.ok().setData(del);
    }

    /**
     * 根据用户名查询用户信息
     *
     * @param loginName 登录用户名，用于查询用户的唯一标识
     * @return 返回用户信息对象，若找不到匹配的用户则返回null
     *
     * 此方法旨在通过用户名快速检索用户信息，可能用于登录验证、用户管理等场景
     * 当前实现返回null，可能需要后续实现具体逻辑
     */
    @Override
    public R queryByUserName(String loginName) {
        return R.ok().setData(this.userInfoMapper.queryByUserName(loginName));
    }

    /**
     * 根据用户名和密码查询用户信息
     * 此方法用于验证用户登录，通过用户名和密码的匹配来确保身份的合法性
     *
     * @param username 用户名，用于标识用户的唯一名称
     * @param password 用户密码，用于验证用户身份的安全凭证
     * @return 返回匹配用户的信息，若无匹配则返回null
     */
    @Override
    public R queryByUserNameAndPassword(String username, String password) {
        return R.ok().setData(this.userInfoMapper.queryByUserNameAndPassword(username,password));
    }

    /**
     * 根据用户手机号查询用户信息
     *
     * @param phone 用户手机号
     * @return 包含用户信息的数据响应对象
     */
    @Override
    public R queryByUserPhone(String phone) {
        return R.ok().setData(this.userInfoMapper.queryByUserPhone(phone));

    }

    /**
     * 根据用户邮箱查询用户信息
     *
     * @param email 用户邮箱
     * @return 包含用户信息的数据响应对象
     */
    @Override
    public R queryByUserEmail(String email) {
        return R.ok().setData(this.userInfoMapper.queryByUserEmail(email));
    }
}

